<!DOCTYPE>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>离散点插值分析</title>
    <style type="text/css">
        body{
            margin: 0;
            overflow: hidden;
            background: #fff;
        }
        #map{
            position: relative;
            height: 500px;
            border:1px solid #3473b7;
        }

        #toolbar {
            position: relative;
            padding-top: 5px;
            padding-bottom: 10px;
        }
    </style>
    <link href='./css/bootstrap.min.css' rel='stylesheet' />
    <link href='./css/bootstrap-responsive.min.css' rel='stylesheet' />
    <script src='../libs/SuperMap.Include.js'></script>
    <script type="text/javascript">
    var host = document.location.toString().match(/file:\/\//)?"http://localhost:8090":'http://' + document.location.host,
            url=host+"/iserver/services/map-temperature/rest/maps/全国温度变化图",
            url2=host+"/iserver/services/spatialanalyst-sample/restjsr/spatialanalyst";
    var map,baseLayer,themeLayer,points=[];
    function init(){
        map = new SuperMap.Map("map",{controls: [
            new SuperMap.Control.LayerSwitcher(),
            new SuperMap.Control.ScaleLine(),
            new SuperMap.Control.Zoom(),
            new SuperMap.Control.Navigation({
                dragPanOptions: {
                    enableKinetic: true
                }
            })], units: "m"
        });
        map.allOverlays = true;
        baseLayer = new SuperMap.Layer.TiledDynamicRESTLayer("全国温度变化图", url, {transparent: true, cacheEnabled: true}, {maxResolution:"auto"});
        baseLayer.params.layersID="[0,1,2]";
        baseLayer.events.on({"layerInitialized":addLayer});
    }
    function addLayer() {
        map.addLayer(baseLayer);
        map.setCenter(new SuperMap.LonLat(531762, 3895330), 0);
    }
    //离散点插值分析
    function cretePointsAnalyst(){
        removeInterpolation();
        //查询，以得到用于插值分析的geometry
        var queryParam, queryBySQLParams, queryBySQLService;
        queryParam = new SuperMap.REST.FilterParameter({
            name: "SamplesP@Interpolation",
            attributeFilter:"SMID>0"
        });
        queryBySQLParams = new SuperMap.REST.QueryBySQLParameters({
            queryParams: [queryParam]
        });
        queryBySQLService = new SuperMap.REST.QueryBySQLService(url, {
            eventListeners: {"processCompleted": sqlService_ProcessCompleted, "processFailed": processFailed}});
        queryBySQLService.processAsync(queryBySQLParams);
    }
    function sqlService_ProcessCompleted(queryEventArgs) {
        var feature, recordsets = queryEventArgs.result.recordsets;
        var z,zMin=parseFloat(document.getElementById("zMin").value),
                zMax=parseFloat(document.getElementById("zMax").value);
        if (recordsets) {
            for(var i=0;i<recordsets[0].features.length;i++){
                gp=recordsets[0].features[i].geometry;
                var point =new SuperMap.Geometry.Point(gp.x,gp.y);
                //每个插值点在插值过程中的权重值
                z=Math.random()*(zMax-zMin)+zMin;
                point.tag=z;
                points.push(point);
            }
        }
        //IDW插值法
        var interpolationParams=new SuperMap.REST.InterpolationIDWAnalystParameters({
            //插值分析类型
            InterpolationAnalystType:"geometry",
            //插值分析结果数据集的名称
            outputDatasetName: "IDWcretePoints_result",
            //插值分析结果数据源的名称
            outputDatasourceName: "Interpolation",
            //结果栅格数据集存储的像素格式
            pixelFormat: SuperMap.REST.PixelFormat.double,
            //用于做插值分析的离散点集合
            inputPoints:points,
            // 属性过滤条件
            filterQueryParameter: {
                attributeFilter: ""
            },
            //采取定长查找参与运算点的方式
             searchMode: "KDTREE_FIXED_RADIUS",
           // 查找半径,与点数据单位相同
            searchRadius:200,
            resolution: 3000,
            bounds:new SuperMap.Bounds(-2640403.6321084504, 1873792.1034850003, 3247669.390292245, 5921501.395578556)
        });
        var interpolationService=new SuperMap.REST.InterpolationAnalystService(url2,{
            eventListeners: {
                "processCompleted": processCompleted,
                "processFailed": processFailed
            }});
        interpolationService.processAsync(interpolationParams);
    }


    //插值分析成功后，使用栅格分段专题图显示
    function processCompleted(InterpolationAnalystEventArgs){

        var color1 = new SuperMap.REST.ServerColor(170,240,233),
                color2 = new SuperMap.REST.ServerColor(176,244,188),
                color3 = new SuperMap.REST.ServerColor(218,251,178),
                color4 = new SuperMap.REST.ServerColor(220,236,145),
                color5 = new SuperMap.REST.ServerColor(96,198,66),
                color6 = new SuperMap.REST.ServerColor(20,142,53),
                color7 = new SuperMap.REST.ServerColor(85,144,55),
                color8 = new SuperMap.REST.ServerColor(171,168,38),
                color9 = new SuperMap.REST.ServerColor(235,165,9),
                color10 = new SuperMap.REST.ServerColor(203,89,2),
                color11= new SuperMap.REST.ServerColor(157,25,1),
                color12= new SuperMap.REST.ServerColor(118,15,3),
                color13= new SuperMap.REST.ServerColor(112,32,7),
                color14= new SuperMap.REST.ServerColor(106,45,12),
                color15= new SuperMap.REST.ServerColor(129,80,50),
                color16= new SuperMap.REST.ServerColor(160,154,146),
                color17= new SuperMap.REST.ServerColor(107,47,14),
                color18= new SuperMap.REST.ServerColor(125,75,44),
                color19= new SuperMap.REST.ServerColor(146,110,88),
                color20= new SuperMap.REST.ServerColor(166,153,146),
                themeGridRangeIteme1 = new SuperMap.REST.ThemeGridRangeItem({
                    start:-5,
                    end:-3.4,
                    color: color1
                }),

                themeGridRangeIteme2 = new SuperMap.REST.ThemeGridRangeItem({
                    start: -3.4,
                    end: -1.8,
                    color: color2
                }),
                themeGridRangeIteme3 = new SuperMap.REST.ThemeGridRangeItem({
                    start:-1.8,
                    end:-0.2,
                    color: color3
                }),
                themeGridRangeIteme4 = new SuperMap.REST.ThemeGridRangeItem({
                    start: -0.2,
                    end:  1.4,
                    color: color4
                }),
                themeGridRangeIteme5 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 1.4,
                    end:  3,
                    color: color5
                }),
                themeGridRangeIteme6 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 3,
                    end:  4.6,
                    color: color6
                }),
                themeGridRangeIteme7 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 4.6,
                    end: 6.2,
                    color: color7
                }),

                themeGridRangeIteme8 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 6.2,
                    end: 7.8,
                    color: color8
                }),
                themeGridRangeIteme9 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 7.8,
                    end:  9.4,
                    color: color9
                }),
                themeGridRangeIteme10 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 9.4,
                    end:  11,
                    color: color10
                }),
                themeGridRangeIteme11 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 11,
                    end:  12.6,
                    color: color11
                }),
                themeGridRangeIteme12 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 12.6,
                    end:  14.2,
                    color: color12
                }),
                themeGridRangeIteme13 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 14.2,
                    end: 15.8,
                    color: color13
                }),

                themeGridRangeIteme14 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 15.8,
                    end: 17.4,
                    color: color14
                }),
                themeGridRangeIteme15 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 17.4,
                    end:  19,
                    color: color15
                }),
                themeGridRangeIteme16 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 19,
                    end:  20.6,
                    color: color16
                }),
                themeGridRangeIteme17 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 20.6,
                    end:  22.2,
                    color: color17
                }),
                themeGridRangeIteme18 = new SuperMap.REST.ThemeGridRangeItem({
                    start:  22.2,
                    end:  23.8,
                    color: color18
                }),
                themeGridRangeIteme19 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 23.8,
                    end:  25.4,
                    color: color19
                }),
                themeGridRangeIteme20 = new SuperMap.REST.ThemeGridRangeItem({
                    start: 25.4,
                    end:  27,
                    color: color20
                }),

                themeGridRange = new SuperMap.REST.ThemeGridRange({
                    reverseColor:false,
                    rangeMode: SuperMap.REST.RangeMode.EQUALINTERVAL,
                    //栅格分段专题图子项数组
                    items: [themeGridRangeIteme1,
                        themeGridRangeIteme2,
                        themeGridRangeIteme3,
                        themeGridRangeIteme4,
                        themeGridRangeIteme5,
                        themeGridRangeIteme6,
                        themeGridRangeIteme7,
                        themeGridRangeIteme8,
                        themeGridRangeIteme9,
                        themeGridRangeIteme10,
                        themeGridRangeIteme11,
                        themeGridRangeIteme12,
                        themeGridRangeIteme13,
                        themeGridRangeIteme14,
                        themeGridRangeIteme15,
                        themeGridRangeIteme16,
                        themeGridRangeIteme17,
                        themeGridRangeIteme18,
                        themeGridRangeIteme19,
                        themeGridRangeIteme20
                    ]
                }),

                themeParameters = new SuperMap.REST.ThemeParameters({
                    //制作专题图的数据集数组
                    datasetNames:[InterpolationAnalystEventArgs.result.dataset.split('@')[0]],
                   // 制作专题图的数据集所在的数据源数组
                    dataSourceNames: ["Interpolation"],
                    joinItems: null,
                    //专题图对象列表
                    themes: [themeGridRange]
                });
        var themeService = new SuperMap.REST.ThemeService(url, {eventListeners:{"processCompleted": themeCompleted, "processFailed": themeFailed}});
        themeService.processAsync(themeParameters);
    }
    function themeCompleted(themeEventArgs) {
        if(themeEventArgs.result.resourceInfo.id) {
            themeLayer = new SuperMap.Layer.TiledDynamicRESTLayer("插值分析结果图", url, {cacheEnabled:true,transparent: true,layersID: themeEventArgs.result.resourceInfo.id}, {"maxResolution":"auto"});
            themeLayer.events.on({"layerInitialized":addThemelayer});

        }
    }
    function addThemelayer() {
        map.addLayer(themeLayer);

    }
    function processFailed(ServiceFailedEventArgs){
        alert(ServiceFailedEventArgs.error.errorMsg);
    }
    function themeFailed(serviceFailedEventArgs) {
        alert(serviceFailedEventArgs.error.errorMsg);
    }
    function removeInterpolation(){
        if (map.layers.length >1) {
            map.removeLayer(themeLayer, true);
        }
    }

    </script>
</head>
<body onload="init()">
<div id="toolbar">
    <span style='font-size: 1.2em;'> Z值范围 最小值:</span>
    <input type='number' style='width:50px;height: 25px' id='zMin' value='-5'/>
    <span style='font-size: 1.2em;'>最大值：</span>
    <input type='number' style='width:50px;height: 25px' id='zMax' value='28'/>
    <input type="button" class="btn" value="离散点插值分析" style="margin-bottom: 10px" onclick="cretePointsAnalyst()" />
    <input type="button" class="btn" value="删除" style="margin-bottom: 10px" onclick="removeInterpolation()" />
</div>
<div id="map"></div>
</body>
</html>